// This file was procedurally generated from the following sources:
// - src/async-generators/yield-spread-arr-single.case
// - src/async-generators/default/async-class-expr-method.template
/*---
description: Use yield value in a array spread position (Async generator method as a ClassExpression element)
esid: prod-AsyncGeneratorMethod
features: [async-iteration]
flags: [generated, async]
info: |
    ClassElement :
      MethodDefinition

    MethodDefinition :
      AsyncGeneratorMethod

    Async Generator Function Definitions

    AsyncGeneratorMethod :
      async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody }


    Array Initializer

    SpreadElement[Yield, Await]:
      ...AssignmentExpression[+In, ?Yield, ?Await]

---*/
function Test() {
    var arr = ['a', 'b', 'c'];


    var callCount = 0;

    var C = class { async *gen() {
        callCount += 1;
        yield [...yield];
    }}

    var gen = C.prototype.gen;

    var iter = gen();

    iter.next(false);
    var item = iter.next(arr);

    item.then(({ done, value }) => {
      assert.notSameValue(value, arr, 'value is a new array');
      assert(Array.isArray(value), 'value is an Array exotic object');
      assert.sameValue(value.length, 3)
      assert.sameValue(value[0], 'a');
      assert.sameValue(value[1], 'b');
      assert.sameValue(value[2], 'c');
      assert.sameValue(done, false);
    }).then($DONE, $DONE);

    assert.sameValue(callCount, 1);
}

// preheat
const NUMBER_OF_PREHEAT = 1;
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}

ArkTools.jitCompileAsync(Test);
assert.sameValue(ArkTools.waitJitCompileFinish(Test), true, '[JIT] JIT disabled.');

// test
const NUMBER_OF_TEST = 1; // or 2
for (let i = 0; i < NUMBER_OF_TEST; i++) {
    Test();
}
